def crc16_modbus(data: bytes) -> int:
    """计算 MODBUS CRC-16 校验码"""
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            if crc & 0x0001:
                crc = (crc >> 1) ^ 0xA001  # MODBUS 多项式（0xA001）
            else:
                crc >>= 1
    return crc

# 输入数据（0F 03 02 50 00 04）
s ="0205 0000 0000"
data = bytes.fromhex(s)
crc = crc16_modbus(data)

# MODBUS 要求 CRC 低字节在前
crc_bytes = crc.to_bytes(2, byteorder='little')  # 小端序（低字节在前）
print(f"CRC-16/MODBUS: 0x{crc:04X}")  # 完整 CRC 值（如 0xABCD）
print(f"校验码（低字节在前）: {crc_bytes.hex(' ')}")  # 如 "cd ab"
print(s,crc_bytes.hex(' '))